﻿using System;
using System.Data;
using System.Web;
using System.Collections;
using System.Web.Security;
using NMT_WEB.Code;
using NMT_BLL;

namespace NMT_WEB.Frm
{
    /// <remarks>
    /// Autor:  César Murcia
    /// email:  cmurcia@gmail.com
    /// </remarks>
    /// <remarks>
    /// Fecha:  17-11-2011
    /// </remarks>
    /// <summary>
    /// Descripción:    Inicio de la aplicación.
    /// </summary>
    public partial class Frm_Index : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string[] arr;

            arr = System.Web.HttpContext.Current.Request.LogonUserIdentity.Name.Split('\\');

            if (arr.Length > 0)
            {
                // Dominio arr[0].ToString();
                // Usuario arr[1].ToString();

                string[] chain = this.Autorizar();

                if (chain != null)
                {
                    SessionControl.Status = true;
                    SessionControl.Group = chain[0];
                    SessionControl.IDUser = chain[1];
                    Session["MENSAJE"] = null;
                }
                else
                {
                    Session["MENSAJE"] = "El Usuario NO Tiene Permiso para Ingresar a NMT";
                    Response.Redirect("../Frm/NoLogin.aspx");
                }

            }
            else
            {
                Session["MENSAJE"] = "Error en la Autenticación" + System.Web.HttpContext.Current.Request.LogonUserIdentity.Name;
            }
        }

        //----------------------------------------------------------------
        #region "Métodos de Autenticación"
        //----------------------------------------------------------------

        /// <summary>
        /// Obtener los grupos del usuario local.
        /// </summary>
        public ArrayList GetGroups()
        {
            ArrayList groups = new ArrayList();

            foreach (System.Security.Principal.IdentityReference group in System.Web.HttpContext.Current.Request.LogonUserIdentity.Groups)
            {
                groups.Add(group.Translate(typeof(System.Security.Principal.NTAccount)).ToString());
            }

            return groups;
        }
        
        /// <summary>
        /// Comprobar identidad.
        /// </summary>
        public string[] Autorizar()
        {
            string groupName;
            ArrayList groups;
            DataTable dt;
            string[] chain;

            try
            {
                groupName = string.Empty;
                groups = new ArrayList();
                groups = GetGroups();   //se obtiene la lista de los grupos a los cuales pertenece el usuario

                // Obtener los grupos de la aplicación Web
                dt = new DataTable();
                Autenticacion au = new Autenticacion();
                dt = au.Grupos;
                au = null;

                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    foreach (string grp in groups)
                    {
                        if (grp.Split('\\').Length > 1)
                        {
                            groupName = grp.ToUpper().Split('\\')[1];

                            if (dt.Rows[i]["NOMBRE"].ToString().ToUpper().Trim() == groupName.Trim())
                            {
                                chain = new string[2];
                                chain[0] = groupName; // Grupo
                                chain[1] = dt.Rows[i]["ID"].ToString(); // ID

                                return chain;
                            }
                        }
                    }
                }

                return null;

            }
            catch (Exception)
            {
                return null;
            }
        }

        #endregion "Validación"
        //----------------------------------------------------------------

    }
}